/**
 * 邮箱
 * @param {*} s
 */
import {checkRepeatNamePromise} from '../api/customer/personal'

export function isEmail (s) {
  return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}

/**
 * 手机号码
 * @param {*} s
 */
export function isMobile (s) {
  return /^1[0-9]{10}$/.test(s)
}

/**
 * 电话号码
 * @param {*} s
 */
export function isPhone (s) {
  return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}

/**
 * URL地址
 * @param {*} s
 */
export function isURL (s) {
  return /^http[s]?:\/\/.*/.test(s)
}

/**
 * 社会统一信用代码
 * @param {*} s
 */
export function isCertificateCode (s) {
  return /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}/g.test(s)
}

/**
 * 身份证
 * @param {*} s
 */
export function isIdentityCard (s) {
  return /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)/.test(s)
}

/**
 * 名字
 * @param {*} s
 */
export function isName (s) {
  // 汉字或者字母
  return /^ [\u4e00-\u9fa5] | [a-zA-Z]$/.test(s)
  // 只能汉字或者字母
  // return !/[\u4e00-\u9fa5][a-zA-Z]{1}|[a-zA-Z][\u4e00-\u9fa5]{1}/.test(s)
}

/**
 * 手机或电话校验器
 * @param {*} s
 */

export let mobileAndPhoneValidator = (rule, value, callBack) => {
  if (value !== '') {
    if (!isMobile(value) && !isPhone(value)) {
      return callBack(new Error('手机或电话号码格式有误，请检查后输入'))
    } else {
      callBack()
    }
  } else {
    callBack()
  }
}

/**
 * 身份证校验器
 * @param {*} s
 */
export let identityCardValidator = (rule, value, callBack) => {
  if (value) {
    if (!isIdentityCard(value)) {
      return callBack(new Error('身份证号码格式有误，请检查后输入!'))
    } else {
      callBack()
    }
  } else {
    callBack()
  }
}

/**
 * 社会统一代码校验器
 * @param rule
 * @param value
 * @param callBack
 */
export let certificateCodeValidator = (rule, value, callBack) => {
  if (value === '') {
    return callBack(new Error('请填写社会统一信用代码'))
  } else if (value.length !== 18) {
    return callBack(new Error('代码位数为18位，请检查后输入'))
  } else if (!isCertificateCode(value)) {
    return callBack(new Error('社会统一信用代码格式有误，请检查后输入'))
  } else {
    callBack()
  }
}
export let repeatCertificateCodeValidator = async (rule, value, callBack) => {
  // console.log('rule', rule)
  if (value === '') {
    return callBack(new Error('请填写社会统一信用代码'))
  } else if (value.length !== 18) {
    return callBack(new Error('代码位数为18位，请检查后输入'))
  } else if (!isCertificateCode(value)) {
    return callBack(new Error('社会统一信用代码格式有误，请检查后输入'))
  } else {
    // callback的返回内容不能改变涉及行用代码重复添加合作记录的问题
    await checkRepeatNamePromise(
      {'id': '',
        'certificateCode': value,
        'name': ''}).then(() => { callBack() }).catch((data) => { callBack('社会统一信用代码重复') })
  }
}

/**
 * 手机校验器
 * @param {*} s
 */
export let mobileValidator = (rule, value, callBack) => {
  if (value !== '') {
    if (!isMobile(value)) {
      return callBack(new Error('手机号码格式有误，请检查后输入'))
    } else {
      callBack()
    }
  } else {
    callBack()
  }
}

/**
 * 姓名校验器
 * @param {*} s
 */
export let nameValidator = (rule, value, callBack) => {
  if (value !== '') {
    if (!isName(value)) {
      return callBack(new Error('名字格式有误，只能包含中文或英文，请检查后输入'))
    } else {
      callBack()
    }
  } else {
    callBack()
  }
}
